package com.dcloud.utils;

import org.springframework.beans.BeanUtils;

import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;

/**
 * @Author shijf
 * @Description //对象工具类，提供DO,DTO之间转换
 * @Date 22:33 2024/1/19
 **/
public class SpringBeanUtil {
    public static <T> T copyProperties(Object source, Class<T> target) {
        if (source == null || target == null) {
            // 如果源对象或目标对象为空，返回空对象
            return null;
        }
        try {
            // 创建目标对象
            T t = target.getConstructor().newInstance();

            // 将源对象的属性拷贝到目标对象
            BeanUtils.copyProperties(source, t);
            // 返回目标对象
            return t;
        } catch (Exception e) {
            // 捕获异常并抛出运行时异常
            throw new RuntimeException(e);
        }
    }

    /**
     * 复制列表中的属性到目标类的列表中
     *
     * @param sources 源对象列表
     * @param target 目标类
     * @param <T> 目标类类型
     * @return 复制后的目标类列表，如果源对象或目标对象为空，返回空对象
     */
    public static <T> List<T> copyProperties(List<?> sources, Class<T> target) {
        if (sources == null || target == null) {
            // 如果源对象或目标对象为空，返回空对象
            return null;
        }

        ArrayList<T> targetList = new ArrayList<>();
        sources.forEach(e -> {
            if (e != null) {
                T t = copyProperties(e, target);
                targetList.add(t);
            }
        });

        return targetList;
    }

}
